import java.util.Random;

/*
    题目4（综合扩展）
    小明去彩票站买彩票，随机一注双色球。使用数组存储小明的随机的彩票数字。 双色球规则 ：有6个红球加1个蓝
    球，每个红球的范围是[1-32]， 蓝球的范围是[1-16]， 红球之间的数字不可重复，蓝球是可以和红球重复的,用数组存
    储7个元素(数组中的元素,不考虑排序问题)
 */
public class Extend04RedBlueLotte {
    public static void main(String[] args) {

        Random rd = new Random();
        int[] red = new int[6];
        int[] blue = new int[1];
        //接收随机数据
        for (int i = 0;i < 6;i++){
            if(i < blue.length){//*利用一个循环,为两个不同长度随机数组赋值(在较长组内加if控制长度)
                    blue[i] = rd.nextInt(16) + 1;//*此句前加 while(blue[0] != 16){},可确定范围是否可取到16
            }
            red[i] = rd.nextInt(32) + 1;
        }
        //排查重复    *思路二 :全部赋值完,从前往后,排查,如果有重复,修改,再从头排查重复(思路一 见LotteryDraw)
        lo:for(int i = 0;i < red.length;i++){
            int j = 0;
            while(j != red.length){ //*关键语句
                //实现从头排查,且i全部排查完毕后到下个位置(如果条件不符说明中间有重复并跳转至 从头排查)
                for (j = 0;j < red.length;j++){
                    /*
                    以下最好是 while(red[i] == red[j]),并跳出for(加标号).
                    一般来说,重新取随机数不会和最近一次相同.
                    但区别在于,如果只用if,那么会进行一次与刚刚相同的从头比较(因为位置\数值没变)
                    当然最后肯定能产生不同值,并跑通,就是会多这么一下儿
                     */
                    if(i != j && red[i] == red[j]){//*注意i != j,否则无限循环:同位置,值永远相等
                        red[i] = rd.nextInt(32) + 1;
                        break;//跳出for,while兜住,j从0开始
                    }
                }
            }
        }

        System.out.print("红球为 : ");
        for (int i = 0;i < red.length;i++){
            System.out.print(red[i]+" ");
        }

        System.out.println("蓝球为 : " + blue[0]);

    }
}
